static PyObject *TorqueObjectNotFoundError = NULL;
static PyObject *TorqueRegisterFunctionError = NULL;

enum TSRETURN_TYPES {
	TSRETURN_VOID,
	TSRETURN_STRING,
	TSRETURN_INT,
	TSRETURN_FLOAT,
	TSRETURN_BOOL
};

struct pyfunc_struct
{
	PyObject* callback;
	TSRETURN_TYPES return_type;
};

std::map<std::string, pyfunc_struct*> pyfunc_map;



#define MACRO__tsf_BlCon__executef(varassign, which_macro, obj, argcount, av) \
	if( argcount == 1 ) {\
		which_macro(varassign, obj, argcount, av[0]); \
\
	} else if( argcount == 2) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 3) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 4) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 5) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 6) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 7) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 8) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 9) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 10) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 11) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 12) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 13) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 14) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 15) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 16) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 17) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 16) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 17) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 18) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20]); \
\
	} else if( argcount == 19) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19]); \
\
	} else if( argcount == 20) {\
		which_macro(varassign, obj, argcount, \
	 av[0], av[1], av[2], av[3], av[4],\
	 av[5], av[6], av[7], av[8], av[9],\
	av[10],av[11],av[12],av[13],av[14],\
	av[15],av[16],av[17],av[18],av[19],av[20])\
	}



#define MACRO_A__executef(varassign, obj, argcount, ...) \
	varassign = tsf_BlCon__executef(argcount, __VA_ARGS__);

#define MACRO_B__executefSimObj(varassign, obj, argcount, ...) \
	varassign = tsf_BlCon__executefSimObj(obj, argcount, __VA_ARGS__);


